package mx.ipn.presentacion.empleado;

import mx.ipn.persistencia.FabricaDeDAOs;
import mx.ipn.presentacion.Utilerias;
import mx.ipn.presentacion.empleado.ui.Ui_Horario1;
import mx.ipn.presentacion.empleado.ui.Ui_Horario2;
import mx.ipn.presentacion.empleado.ui.Ui_EmpleadoPrincipal;
import mx.ipn.presentacion.ConexionConNegocios;
import mx.ipn.to.FechaHoraTO;
import mx.ipn.to.HorarioTO;
import mx.ipn.to.BitacoraHorarioTO;
import mx.ipn.to.PersonaTO;
import mx.ipn.to.PuestoTO;
import mx.ipn.to.UsuarioTO;
import mx.ipn.to.TurnoTO;
import mx.ipn.to.EmpleadoTO;
import mx.ipn.to.BitacoraAsistenciaTO;
import mx.ipn.to.FiltroEmpleadoTO;
import mx.ipn.to.TransferObject;
import java.util.ArrayList;
import java.util.Date;
import com.trolltech.qt.core.QDate;
import com.trolltech.qt.gui.QBrush;
import com.trolltech.qt.gui.QCalendarWidget;
import com.trolltech.qt.gui.QColor;
import com.trolltech.qt.gui.QComboBox;
import com.trolltech.qt.gui.QTableWidget;
import com.trolltech.qt.gui.QTableWidgetItem;
import com.trolltech.qt.gui.QTextCharFormat;
import com.trolltech.qt.gui.QWidget;

public class ComportamientoHorario extends QWidget {

	Ui_EmpleadoPrincipal ui = null;
	String titulo = null;
	boolean banderaBaja = false;
	boolean banderaModificar = false;
	boolean banderaConsulta = false;
	boolean eventoBotonValor = false;
	boolean eventoBotonValor2 = false;
	Ui_Horario1 horario1 = null;
	Ui_Horario2 horario2 = null;
	UsuarioTO usuarioTO = null;

	HorarioTO horarioTO = null;
	HorarioTO horarioModTO = null;
	HorarioTO[] arrHorarioTO = null;

	PuestoTO[] arrPuestoTO = null;
	TurnoTO[] arrTurnoTO = null;
	EmpleadoTO[] arrEmpleadoTO = null;
	EmpleadoTO[] arrEmpContemTO = null;
	EmpleadoTO[] arrJefeTO = null;
	EmpleadoTO empleadoTO = null;
	EmpleadoTO empleadoContTO = null;
	ArrayList<BitacoraAsistenciaTO> arrBitacoraAsistenciaTO = null;
	ArrayList<BitacoraAsistenciaTO> arrBitacoraAsistenciaModTO = null;

	TurnoTO[] arrTurnoTO2 = null;
	BitacoraHorarioTO bitHorModTO= null;

	public void cambioTurno2(int indice) {
		if (indice > -1) {
			horario2.pushButtonBuscarHorario2.setEnabled(true);
			horario2.pushButtonLimpiarHorario2.setEnabled(true);
		}
	}
	
	
	
	public void botonMostrar() {
		BitacoraHorarioTO bitacoraHorTO = new BitacoraHorarioTO();
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);

		java.sql.Date inicio = FechaHoraTO.getFecha("1971/01/01");
		java.sql.Date fin = FechaHoraTO.getFecha("3000/01/01");
		bitacoraHorTO = fabrica.getBitacoraHorarioDAO()
				.selectByRangoFechaHorario(inicio, fin,
						horarioTO.getIdHorario());

		if (banderaModificar == true) {
			TransferObject regresoTO = (TransferObject) ConexionConNegocios
					.invocaServicio("validarRangoFecha", horarioTO,
							TransferObject.class);

			if (regresoTO != null) {
				if (regresoTO.getTipoError() == 0) {

				} else {
					banderaConsulta = true;
					Utilerias
							.mostrarMensajeError(
									this,
									new TransferObject(
											3,
											"",
											"El horario seleccionado ya no se puede modificar, debido a que su periodo ha concluido o esta en proceso, por lo que solo se abrira en modo consulta."));
				}
			}
		}

		agregarHorario(ui, usuarioTO, bitacoraHorTO);

	}

	public void botonLimpiar2() {
		horario2.comboBoxValor1Horario2.currentIndexChanged.emit(-1);

	}

	public void conversorTOARRTOPorTurno(HorarioTO horarioTO) {
		arrHorarioTO = null;
		arrHorarioTO = new HorarioTO[horarioTO.getListIdHorario().length];
		for (int x = 0; x < horarioTO.getListIdHorario().length; x++) {
			HorarioTO auxTO = new HorarioTO();
			auxTO.setIdHorario(horarioTO.getListIdHorario()[x]);
			auxTO.setFechaInicio(horarioTO.getListFechaInicio()[x]);
			auxTO.setFechaTermino(horarioTO.getListFechaTermino()[x]);
			auxTO.setTurnoTO(horarioTO.getTurnoTO());
			arrHorarioTO[x] = auxTO;
		}
	}

	public void botonBuscarTurno2() {
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		HorarioTO reciveTO = null;
		reciveTO = fabrica.getHorarioDAO().selectHorariobyTurno(
				arrTurnoTO2[horario2.comboBoxValor1Horario2.currentIndex()]
						.getIdTurno());
		if (reciveTO == null)
			arrHorarioTO = null;
		else {
			conversorTOARRTOPorTurno(reciveTO);
		}
		preparaVentanaBCM(null);
	}

	public void botonBuscarRangoFecha() {
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);

		java.sql.Date inicio = FechaHoraTO
				.getFecha(horario2.lineEditValor2Horario2.text());
		java.sql.Date fin = FechaHoraTO
				.getFecha(horario2.lineEditValor3Horario2.text());

		ArrayList<HorarioTO> listHorarioTO = fabrica.getHorarioDAO()
				.selectHorarioByRangoInicio(inicio, fin);

		if (listHorarioTO != null) {
			arrHorarioTO = (HorarioTO[]) listHorarioTO
					.toArray(new HorarioTO[listHorarioTO.size()]);
		} else {
			arrHorarioTO = null;
		}

		preparaVentanaBCM(null);
	}

	public void seleccionBusqueda2(int seleccion) {
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		horario2.comboBoxBuscar_3.disconnect();
		horario2.comboBoxValor1Horario2.disconnect();
		horario2.lineEditValor2Horario2.disconnect();
		horario2.lineEditValor3Horario2.disconnect();
		horario2.pushButtonLimpiarHorario2.disconnect();
		horario2.pushButtonBuscarHorario2.disconnect();

		horario2.lineEditValor2Horario2.setVisible(false);
		horario2.lineEditValor3Horario2.setVisible(false);
		horario2.comboBoxValor1Horario2.setVisible(false);
		horario2.labelValor1Horario2.setVisible(false);
		horario2.labelValor2Horario2.setVisible(false);
		horario2.labelValor3Horario2.setVisible(false);

		horario2.pushButtonBuscarHorario2.setEnabled(false);
		horario2.pushButtonLimpiarHorario2.setEnabled(false);

		horario2.comboBoxValor1Horario2.clear();
		horario2.lineEditValor2Horario2.clear();
		horario2.lineEditValor3Horario2.clear();

		horario2.comboBoxBuscar_3.currentIndexChanged.connect(this,
				"seleccionBusqueda2(int)");
		horario2.pushButtonLimpiarHorario2.clicked.connect(this,
				"botonLimpiar2()");

		switch (seleccion) {
		case 0: {

			horario2.comboBoxValor1Horario2.setVisible(true);
			horario2.labelValor1Horario2.setVisible(true);
			horario2.labelValor1Horario2.setText("Turno:");
			ArrayList<TurnoTO> listTurnoTO = fabrica.getTurnoDAO()
					.selectTurno();

			arrTurnoTO2 = (TurnoTO[]) listTurnoTO
					.toArray(new TurnoTO[listTurnoTO.size()]);
			for (int x = 0; x < arrTurnoTO2.length; x++) {
				horario2.comboBoxValor1Horario2.addItem(arrTurnoTO2[x]
						.getNombre());
			}

			horario2.comboBoxValor1Horario2.setCurrentIndex(-1);

			horario2.comboBoxValor1Horario2.currentIndexChanged.connect(this,
					"cambioTurno2(int)");
			horario2.pushButtonBuscarHorario2.clicked.connect(this,
					"botonBuscarTurno2()");
			break;
		}
		case 1: {

			horario2.lineEditValor2Horario2.setVisible(true);
			horario2.lineEditValor3Horario2.setVisible(true);
			horario2.labelValor2Horario2.setVisible(true);
			horario2.labelValor3Horario2.setVisible(true);
			horario2.labelValor2Horario2.setText("Del:");
			horario2.labelValor2Horario2.setText("Al:");

			horario2.pushButtonBuscarHorario2.setEnabled(true);
			horario2.pushButtonLimpiarHorario2.setEnabled(true);
			horario2.pushButtonBuscarHorario2.clicked.connect(this,
					"botonBuscarRangoFecha()");
			break;
		}

		}
	}

	public void llenarTablaBasico2(QTableWidget tabla, HorarioTO elementoTO,
			int x) {

		QTableWidgetItem __item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Horario", elementoTO.getTurnoTO().getNombre()));
		tabla.setItem(x, 0, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Horario", FechaHoraTO.getFecha(elementoTO.getFechaInicio())
						.toString()));
		tabla.setItem(x, 1, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Horario", FechaHoraTO.getFecha(elementoTO.getFechaTermino())
						.toString()));
		tabla.setItem(x, 2, __item);

	}

	public void llenarTabla2(QTableWidget tabla, HorarioTO[] arrHorAuxTO) {
		tabla.clear();
		agregarTabla2(tabla);
		if (arrHorAuxTO != null) {
			tabla.setRowCount(arrHorAuxTO.length);
			tabla
					.setSelectionMode(com.trolltech.qt.gui.QAbstractItemView.SelectionMode.SingleSelection);
			for (int x = 0; x < arrHorAuxTO.length; x++) {
				llenarTablaBasico2(tabla, arrHorAuxTO[x], x);
			}
		}
	}

	public void agregarTabla2(QTableWidget tableWidgetHorarioHorario2) {

		tableWidgetHorarioHorario2.clear();
		tableWidgetHorarioHorario2.setColumnCount(3);

		QTableWidgetItem __colItem = new QTableWidgetItem();
		__colItem.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Horario2", "Turno"));
		tableWidgetHorarioHorario2.setHorizontalHeaderItem(0, __colItem);

		QTableWidgetItem __colItem1 = new QTableWidgetItem();
		__colItem1.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Horario2", "Del"));
		tableWidgetHorarioHorario2.setHorizontalHeaderItem(1, __colItem1);

		QTableWidgetItem __colItem2 = new QTableWidgetItem();
		__colItem2.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Horario2", "Al"));
		tableWidgetHorarioHorario2.setHorizontalHeaderItem(2, __colItem2);
		tableWidgetHorarioHorario2.setRowCount(0);

		// tableWidgetHorarioHorario2.resizeColumnsToContents();

	}

	public void slotNoEditarTabla3(int x, int y) {
		llenarTablaBasico2(horario2.tableWidgetHorarioHorario2,
				arrHorarioTO[x], x);
	}

	public void seleccionCelda3() {
		seleccionCelda3(horario2.tableWidgetHorarioHorario2, arrHorarioTO);

	}

	public void seleccionCelda3(QTableWidget tabla, HorarioTO[] arrHorAuxTO) {
		if (arrHorAuxTO != null) {

			horarioTO = null;
			horarioTO = arrHorAuxTO[tabla.currentRow()];
			horario2.pushButtonMostrarHorario2.setEnabled(true);

			if (banderaModificar == true || banderaBaja == true) {
				horario2.pushButtonValorHorario2.setEnabled(true);
			}
		}
	}

	public void llenarComboJefe() {
		arrJefeTO = null;
		arrJefeTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
				"jefeDistintoActivo", EmpleadoTO[].class);
		if (arrJefeTO != null) {
			if (arrJefeTO[0].getTipoError() <= 0) {
				for (int x = 0; x < arrJefeTO.length; x++) {
					horario1.comboBoxValorEmpleado2.addItem(arrJefeTO[x]
							.getPersonaTO().getApellidoPaterno()
							+ " "
							+ arrJefeTO[x].getPersonaTO().getNombre()
							+ ";  " + arrJefeTO[x].getPuestoTO().getNombre());
				}
			}
		}
	}

	public void llenarComboTurno() {
		arrTurnoTO = (TurnoTO[]) ConexionConNegocios.invocaServicio(
				"buscarTurnos", TurnoTO[].class);

		if (arrTurnoTO != null) {
			if (arrTurnoTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, arrHorarioTO[0]);
			}
		}

		if (arrTurnoTO != null) {
			horario1.comboBoxTurnoHorario.disconnect();
			for (int x = 0; x < arrTurnoTO.length; x++) {
				horario1.comboBoxTurnoHorario
						.addItem(arrTurnoTO[x].getNombre());
			}
			horario1.comboBoxTurnoHorario.setCurrentIndex(-1);
			horario1.comboBoxTurnoHorario.currentIndexChanged.connect(this,
					"cambioComboTurno(int)");
		}
	}

	public void llenarComboPuesto(QComboBox combo) {
		arrPuestoTO = null;
		arrPuestoTO = (PuestoTO[]) ConexionConNegocios.invocaServicio(
				"obtenerPuestosActivos", PuestoTO[].class);
		if (arrPuestoTO != null) {
			combo.clear();
			if (arrPuestoTO[0].getTipoError() <= 0) {
				for (int x = 0; x < arrPuestoTO.length; x++) {
					combo.addItem(arrPuestoTO[x].getNombre() + ";  "
							+ arrPuestoTO[x].getTipoEmpleadoTO().getNombre());
				}
			}
			combo.setCurrentIndex(-1);
		}
	}

	public void agregarHorario(Ui_EmpleadoPrincipal ui, UsuarioTO usuarioTO,
			BitacoraHorarioTO reciveTO) {
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		if (reciveTO != null) {
			
			arrEmpContemTO = reciveTO.getListEmpleadoTO().clone();
			
			HorarioTO[] auxHorTO = reciveTO.getListHorarioTO().clone();
			
			horarioTO = auxHorTO[0];
			
			java.sql.Date inicio = FechaHoraTO.getFecha(horarioTO
					.getFechaInicio());
			java.sql.Date fin = FechaHoraTO.getFecha(horarioTO
					.getFechaTermino());
			
			bitHorModTO = reciveTO;
			arrBitacoraAsistenciaTO = new ArrayList<BitacoraAsistenciaTO>();

			for (int x = 0; x < arrEmpContemTO.length; x++) {
				BitacoraAsistenciaTO bitacoraAsisTO = fabrica
						.getBitacoraAsistenciaDAO().selectByRangoFechaEmpleado(
								inicio, fin, arrEmpContemTO[x].getIdEmpleado());
				bitacoraAsisTO.setIdEmpleado(arrEmpContemTO[x].getIdEmpleado());

				arrBitacoraAsistenciaTO.add(bitacoraAsisTO);
			}
		}

		if (banderaModificar == true && banderaConsulta != true) {
			horarioModTO = new HorarioTO();

			horarioModTO.setFechaInicio(new Date(horarioTO.getFechaInicio()
					.getTime()));
			horarioModTO.setFechaTermino(new Date(horarioTO.getFechaTermino()
					.getTime()));
			horarioModTO.setIdHorario(horarioTO.getIdHorario());
			TurnoTO auxTTO = new TurnoTO();
			auxTTO.setIdTurno(horarioTO.getTurnoTO().getIdTurno());

			horarioModTO.setTurnoTO(auxTTO);

			arrBitacoraAsistenciaModTO = (ArrayList<BitacoraAsistenciaTO>) arrBitacoraAsistenciaTO
					.clone();
		}

		this.usuarioTO = usuarioTO;

		preparaVentana(ui);

		if (banderaConsulta != true && banderaBaja != true)
			horario1.pushButtonValorHorario1.setText("&Terminar");
		else {
			horario1.pushButtonValorHorario1.setVisible(false);
		}

		if (eventoBotonValor == false) {
			if (banderaModificar == true) {
				if(banderaConsulta==true)
					horario1.pushButtonValorHorario1.setVisible(false);	
				horario1.pushButtonValorHorario1.clicked.connect(this,
						"botonTerminarModificar()");
			} else {
				horario1.pushButtonValorHorario1.clicked.connect(this,
						"botonTerminar()");
			}
			eventoBotonValor = true;
		}

	}

	public void ModificarHorario(Ui_EmpleadoPrincipal ui, UsuarioTO usuarioTO) {
		this.ui = ui;
		this.usuarioTO = usuarioTO;
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		ArrayList<HorarioTO> listHorarioTO = fabrica.getHorarioDAO()
				.selectHorario();
		arrHorarioTO = (HorarioTO[]) listHorarioTO
				.toArray(new HorarioTO[listHorarioTO.size()]);

		if (arrHorarioTO != null) {
			if (arrHorarioTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, new TransferObject(1, "",
						"No se encontraron horarios."));
			}
		}

		preparaVentanaBCM(ui);

		if (eventoBotonValor2 == false) {
			horario2.pushButtonMostrarHorario2.clicked.connect(this,
					"botonMostrar()");
			eventoBotonValor2 = true;
		}

		horario2.pushButtonValorHorario2.setVisible(false);
	}

	public void consultarHorario(Ui_EmpleadoPrincipal ui, UsuarioTO usuarioTO) {
		this.ui = ui;
		this.usuarioTO = usuarioTO;
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		ArrayList<HorarioTO> listHorarioTO = fabrica.getHorarioDAO()
				.selectHorario();
		arrHorarioTO = (HorarioTO[]) listHorarioTO
				.toArray(new HorarioTO[listHorarioTO.size()]);

		if (arrHorarioTO != null) {
			if (arrHorarioTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, new TransferObject(1, "",
						"No se encontraron horarios."));
			}
		}

		preparaVentanaBCM(ui);

		if (eventoBotonValor2 == false) {
			horario2.pushButtonMostrarHorario2.clicked.connect(this,
					"botonMostrar()");
			eventoBotonValor2 = true;
		}

		horario2.pushButtonValorHorario2.setVisible(false);

	}

	public void bajaHorario(Ui_EmpleadoPrincipal ui, UsuarioTO usuarioTO) {

		this.ui = ui;
		this.usuarioTO = usuarioTO;
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		ArrayList<HorarioTO> listHorarioTO = fabrica.getHorarioDAO()
				.selectHorario();
		arrHorarioTO = (HorarioTO[]) listHorarioTO
				.toArray(new HorarioTO[listHorarioTO.size()]);

		if (arrHorarioTO != null) {
			if (arrHorarioTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, new TransferObject(1, "",
						"No se encontraron horarios."));
			}
		}

		preparaVentanaBCM(ui);

		if (eventoBotonValor2 == false) {
			horario2.pushButtonMostrarHorario2.clicked.connect(this,
					"botonMostrar()");
			eventoBotonValor2 = true;
		}

		horario2.pushButtonValorHorario2.setText("&Remover");
		if (eventoBotonValor == false) {
			horario2.pushButtonValorHorario2.clicked.connect(this,
					"botonBaja()");
			eventoBotonValor = true;
		}
	}

	public void preparaVentana(Ui_EmpleadoPrincipal ui) {
		if (horario1 == null) {
			horario1 = new Ui_Horario1();
			horario1.setupUi(ui.centralwidget);
			horario1.dockWidgetHorario1.setHidden(false);
			ui.gridLayout.addWidget(horario1.dockWidgetHorario1);
			horario1.dockWidgetHorario1.setWindowTitle(titulo);

			if (banderaConsulta != true && banderaBaja != true)
				arrEmpleadoTO = (EmpleadoTO[]) ConexionConNegocios
						.invocaServicio("buscarEmpleadosActivos",
								EmpleadoTO[].class);

			limpiarHorario();

			eventosGenerales();

			bloqueaComponentes();

			llenarComboTurno();

			if (banderaConsulta == true || banderaModificar == true
					|| banderaBaja == true) {
				horario1.dateEditDelHorario.setDate(new QDate(
						obtenerAnio(horarioTO.getFechaInicio()),
						obtenerMes(horarioTO.getFechaInicio()),
						obtenerDia(horarioTO.getFechaInicio())));

				horario1.dateEditAlHorario.setDate(new QDate(
						obtenerAnio(horarioTO.getFechaTermino()),
						obtenerMes(horarioTO.getFechaTermino()),
						obtenerDia(horarioTO.getFechaTermino())));

				horario1.calendarWidgetCalendarioHorario.setDateRange(
						horario1.dateEditDelHorario.date(),
						horario1.dateEditAlHorario.date());
				horario1.pushButtonSiguiente1Horario.clicked.emit(true);
				
				horario1.comboBoxTurnoHorario.lineEdit().setText(horarioTO.getTurnoTO().getNombre());
				horario1.comboBoxTurnoHorario.lineEdit().returnPressed.emit();
				
				EmpleadoTO[] arrAuxTO = arrEmpContemTO; 
				arrEmpContemTO = null;
				for (int x = 0; x < arrAuxTO.length; x++) {
					empleadoTO = arrAuxTO[x];
					botonAgregar();
				}
				
				if(banderaModificar==true && banderaConsulta==false){
					horario1.pushButtonSiguiente2Horario.clicked.emit(true);
				}
			} else {
				QDate fecha = new QDate();
				fecha.setDate(2008, 01, 15);
				horario1.dateEditAlHorario.setDate(fecha);
				horario1.dateEditDelHorario.setDate(fecha);
			}

			horario1.pushButtonAgregarHorario.clicked.connect(this,
					"botonAgregar()");

			// horario1.pu.clicked.connect(this,"botonCancelar()");

		} else
			horario1.dockWidgetHorario1.setHidden(false);

		if (banderaConsulta != true && banderaBaja != true) {
			horario1.tableWidgetResultadoEmpleado2.disconnect();
			llenarTabla(horario1.tableWidgetResultadoEmpleado2, arrEmpleadoTO);
			horario1.tableWidgetResultadoEmpleado2.cellChanged.connect(this,
					"slotNoEditarTabla(int,int)");
			horario1.tableWidgetResultadoEmpleado2.clicked.connect(this,
					"seleccionCelda()");
		}

		horario1.tableWidgetConsideradosHorario.disconnect();
		llenarTabla(horario1.tableWidgetConsideradosHorario, arrEmpContemTO);
		horario1.tableWidgetConsideradosHorario.cellChanged.connect(this,
				"slotNoEditarTabla2(int,int)");
		horario1.tableWidgetConsideradosHorario.clicked.connect(this,
				"seleccionCelda2()");

		if (banderaConsulta != true && banderaBaja != true) {
			horario1.comboBoxBuscarEmpleado2.disconnect();
			horario1.comboBoxBuscarEmpleado2.currentIndexChanged.connect(this,
					"seleccionBusqueda(int)");
			horario1.comboBoxBuscarEmpleado2.setCurrentIndex(-1);
		}
	}

	public void preparaVentanaBCM(Ui_EmpleadoPrincipal ui) {
		if (horario2 == null) {
			horario2 = new Ui_Horario2();
			horario2.setupUi(ui.centralwidget);
			horario2.dockWidgetHorario2.setHidden(false);
			ui.gridLayout.addWidget(horario2.dockWidgetHorario2);
			horario2.dockWidgetHorario2.setWindowTitle(titulo);

			// limpiarHorario();

			eventosGenerales2();

			bloqueaComponentes2();
			horario2.pushButtonValorHorario2.setEnabled(false);

		} else
			horario2.dockWidgetHorario2.setHidden(false);

		horario2.tableWidgetHorarioHorario2.disconnect();
		llenarTabla2(horario2.tableWidgetHorarioHorario2, arrHorarioTO);
		horario2.tableWidgetHorarioHorario2.cellChanged.connect(this,
				"slotNoEditarTabla3(int,int)");
		horario2.tableWidgetHorarioHorario2.clicked.connect(this,
				"seleccionCelda3()");

		horario2.comboBoxBuscar_3.disconnect();
		horario2.comboBoxBuscar_3.currentIndexChanged.connect(this,
				"seleccionBusqueda2(int)");
		horario2.comboBoxBuscar_3.setCurrentIndex(-1);

		horario2.pushButtonMostrarHorario2.setEnabled(false);

	}

	public void limpiarHorario() {
		horario1.comboBoxTurnoHorario.disconnect();
		horario1.comboBoxTurnoHorario.setCurrentIndex(-1);
	}

	public void limpiarHorario2() {

	}

	public void eventosGenerales() {
		horario1.comboBoxTurnoHorario.currentIndexChanged.connect(this,
				"cambioComboTurno(int)");
		horario1.pushButtonSiguiente1Horario.clicked.connect(this,
				"botonSiguiente1()");
		horario1.pushButtonSiguiente2Horario.clicked.connect(this,
				"botonSiguiente2()");
		horario1.pushButtonRegresarHorario.clicked.connect(this,
				"botonRegresar()");
		horario1.pushButtonRegresar2.clicked.connect(this, "botonRegresar2()");

		horario1.pushButtonRemoverHorario.clicked.connect(this,
				"botonRemover()");

		horario1.pushButtonDescansoHorario.clicked.connect(this,
				"botonDescanso()");

		horario1.calendarWidgetCalendarioHorario.disconnect();
		horario1.calendarWidgetCalendarioHorario.clicked.connect(this,
				"clickCalendario(QDate)");
		horario1.calendarWidgetCalendarioHorario.activated.connect(this,
				"clickCalendario(QDate)");
	}

	public void eventosGenerales2() {

	}

	public void bloqueaComponentes() {
		if (banderaConsulta != true && banderaBaja != true) {
			horario1.groupBoxCalendarioHorario.setEnabled(false);
			horario1.groupBoxCalendarioHorario.setEnabled(false);
			horario1.pushButtonSiguiente1Horario.setEnabled(false);
			horario1.groupBoxEmpleadosHorario.setEnabled(false);
			horario1.pushButtonAgregarHorario.setEnabled(false);
			horario1.pushButtonSiguiente1Horario.setEnabled(false);
			horario1.pushButtonSiguiente2Horario.setEnabled(false);

			horario1.groupBoxEstadoActualHorario.setEnabled(false);
			horario1.pushButtonDescansoHorario.setEnabled(false);
			horario1.pushButtonValorHorario1.setEnabled(false);

		} else {
			horario1.groupBoxHorarioHorario.setEnabled(false);
			horario1.groupBoxEmpleadosHorario.setEnabled(false);
			horario1.groupBoxEmpleadosConsideradosHorario.setEnabled(true);
			horario1.groupBoxCalendarioHorario.setEnabled(true);
			horario1.pushButtonDescansoHorario.setEnabled(false);
			horario1.pushButtonRemoverHorario.setEnabled(false);
			horario1.pushButtonRegresar2.setEnabled(false);
			horario1.pushButtonDescansoHorario.setEnabled(false);
		}

	}

	public void bloqueaComponentes2() {

	}

	public void botonCancelar() {
		horario1.dockWidgetHorario1.setHidden(true);
	}

	public void seleccionBusqueda(int seleccion) {
		horario1.comboBoxBuscarEmpleado2.disconnect();
		horario1.comboBoxValorEmpleado2.disconnect();
		horario1.comboBoxValor1Empleado2.disconnect();
		horario1.lineEditvalor4Empleado2.disconnect();
		horario1.pushButtonBuscarEmpleado2.disconnect();

		horario1.labelvalor4Empleado2.setEnabled(false);
		horario1.lineEditvalor4Empleado2.setEnabled(false);
		horario1.labelvalor4Empleado2.setVisible(false);
		horario1.lineEditvalor4Empleado2.setVisible(false);
		horario1.lineEditvalor4Empleado2.disconnect();
		horario1.lineEditvalor4Empleado2.setInputMask("");
		horario1.lineEditvalor4Empleado2.setValidator(null);

		horario1.comboBoxValorEmpleado2.clear();
		horario1.comboBoxValorEmpleado2.setValidator(null);
		horario1.labelValorEmpleado2.setVisible(false);
		horario1.comboBoxValorEmpleado2.setVisible(false);

		horario1.pushButtonBuscarEmpleado2.setEnabled(false);
		horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
		horario1.pushButtonLimpiarEmpleado2.setVisible(true);

		horario1.comboBoxValor1Empleado2.clear();
		horario1.comboBoxValor1Empleado2.setValidator(null);
		horario1.labelValor1Empleado2.setVisible(false);
		horario1.labelValor1Empleado2.setEnabled(false);
		horario1.comboBoxValor1Empleado2.setVisible(false);
		horario1.comboBoxValor1Empleado2.setEnabled(false);

		horario1.comboBoxBuscarEmpleado2.currentIndexChanged.connect(this,
				"seleccionBusqueda(int)");

		switch (seleccion) {
		case 0: {

			horario1.labelvalor4Empleado2.setEnabled(true);
			horario1.labelvalor4Empleado2.setVisible(true);
			horario1.labelvalor4Empleado2.setText("CURP:");

			horario1.lineEditvalor4Empleado2.setEnabled(true);
			horario1.lineEditvalor4Empleado2.setVisible(true);
			horario1.lineEditvalor4Empleado2
					.setInputMask(">AAAA-999999-A-AA-AAA-99;*");
			horario1.lineEditvalor4Empleado2.setText("****-999999-*-**-***-99");

			horario1.lineEditvalor4Empleado2.textChanged.connect(this,
					"cambioCURP(String)");
			horario1.lineEditvalor4Empleado2.returnPressed.connect(this,
					"botonBuscarCURP()");
			horario1.pushButtonBuscarEmpleado2.clicked.connect(this,
					"botonBuscarCURP()");
			horario1.lineEditvalor4Empleado2.setFocus();
			break;
		}
		case 1: {

			horario1.labelvalor4Empleado2.setEnabled(true);
			horario1.labelvalor4Empleado2.setVisible(true);
			horario1.labelvalor4Empleado2.setText("NSS:");

			horario1.lineEditvalor4Empleado2.setEnabled(true);
			horario1.lineEditvalor4Empleado2.setVisible(true);
			horario1.lineEditvalor4Empleado2.setInputMask("99999999999;#");

			horario1.lineEditvalor4Empleado2.textChanged.connect(this,
					"cambioNSS(String)");
			horario1.lineEditvalor4Empleado2.returnPressed.connect(this,
					"botonBuscarNSS()");
			horario1.pushButtonBuscarEmpleado2.clicked.connect(this,
					"botonBuscarNSS()");
			horario1.lineEditvalor4Empleado2.setFocus();
			break;
		}
		case 2: {
			horario1.labelValorEmpleado2.setVisible(true);
			horario1.labelValorEmpleado2.setEnabled(true);
			horario1.labelValorEmpleado2.setText("Apellido Paterno:");
			horario1.comboBoxValorEmpleado2.setVisible(true);
			horario1.comboBoxValorEmpleado2.setEnabled(true);
			horario1.comboBoxValorEmpleado2.setCurrentIndex(-1);
			horario1.comboBoxValorEmpleado2.editTextChanged.connect(this,
					"cambioPaterno(String)");

			horario1.labelValor1Empleado2.setVisible(true);
			horario1.labelValor1Empleado2.setEnabled(false);
			horario1.labelValor1Empleado2.setText("Nombre(s)");
			horario1.comboBoxValor1Empleado2.setVisible(true);
			horario1.comboBoxValor1Empleado2.setEnabled(false);
			horario1.comboBoxValor1Empleado2.setCurrentIndex(-1);
			horario1.comboBoxValor1Empleado2.editTextChanged.connect(this,
					"cambioNombre(String)");

			horario1.pushButtonBuscarEmpleado2.clicked.connect(this,
					"botonBuscarNombrePaterno()");
			horario1.comboBoxValorEmpleado2.setFocus();
			break;
		}
		case 3: {
			horario1.labelValorEmpleado2.setVisible(true);
			horario1.labelValorEmpleado2.setEnabled(true);
			horario1.labelValorEmpleado2.setText("Puesto:");
			horario1.comboBoxValorEmpleado2.setVisible(true);
			horario1.comboBoxValorEmpleado2.setEnabled(true);
			llenarComboPuesto(horario1.comboBoxValorEmpleado2);
			horario1.comboBoxValorEmpleado2.setCurrentIndex(-1);
			horario1.comboBoxValorEmpleado2.editTextChanged.connect(this,
					"cambioPuesto(String)");

			horario1.pushButtonBuscarEmpleado2.clicked.connect(this,
					"botonBuscarPuesto()");
			horario1.comboBoxValorEmpleado2.setFocus();
			break;
		}
		case 4: {
			horario1.labelValorEmpleado2.setVisible(true);
			horario1.labelValorEmpleado2.setEnabled(true);
			horario1.labelValorEmpleado2.setText("Jefe Directo:");
			horario1.comboBoxValorEmpleado2.setVisible(true);
			horario1.comboBoxValorEmpleado2.setEnabled(true);
			llenarComboJefe();
			horario1.comboBoxValorEmpleado2.setCurrentIndex(-1);
			horario1.comboBoxValorEmpleado2.editTextChanged.connect(this,
					"cambioJefe(String)");

			horario1.pushButtonBuscarEmpleado2.clicked.connect(this,
					"botonBuscarJefe()");
			horario1.comboBoxValorEmpleado2.setFocus();
			break;
		}

		case 5: {

			horario1.pushButtonBuscarEmpleado2.setEnabled(true);
			horario1.pushButtonLimpiarEmpleado2.setVisible(false);
			horario1.pushButtonBuscarEmpleado2.clicked.connect(this,
					"botonBuscarTodos()");
			break;
		}

		}
	}

	public void llenarTablaBasico(QTableWidget tabla, EmpleadoTO elementoTO,
			int x) {

		QTableWidgetItem __item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado", elementoTO.getNss()));
		tabla.setItem(x, 0, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado", elementoTO.getPersonaTO().getNombre()));
		tabla.setItem(x, 1, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado", elementoTO.getPersonaTO().getApellidoPaterno()));
		tabla.setItem(x, 2, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado", elementoTO.getPersonaTO().getApellidoMaterno()));
		tabla.setItem(x, 3, __item);

		if (elementoTO.getPersonaTO().isSexo() == false) {
			__item = new QTableWidgetItem();
			__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
					"Empleado", "Masculino"));
			tabla.setItem(x, 4, __item);
		} else {
			__item = new QTableWidgetItem();
			__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
					"Empleado", "Femenino"));
			tabla.setItem(x, 4, __item);
		}

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado", elementoTO.getPuestoTO().getNombre()));
		tabla.setItem(x, 5, __item);

		__item = new QTableWidgetItem();
		__item.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado", elementoTO.getPersonaTO().getCurp()));
		tabla.setItem(x, 6, __item);

		tabla.resizeColumnToContents(0);
		tabla.resizeColumnToContents(2);
		tabla.setColumnWidth(4, 65);
		tabla.setColumnWidth(1, 100);
		tabla.setColumnWidth(5, 100);
		tabla.setColumnWidth(6, 120);
	}

	public void llenarTabla(QTableWidget tabla, EmpleadoTO[] arrEmpAuxTO) {
		tabla.clear();
		agregarTabla(tabla);
		if (arrEmpAuxTO != null) {
			tabla.setRowCount(arrEmpAuxTO.length);
			tabla
					.setSelectionMode(com.trolltech.qt.gui.QAbstractItemView.SelectionMode.SingleSelection);
			for (int x = 0; x < arrEmpAuxTO.length; x++) {
				llenarTablaBasico(tabla, arrEmpAuxTO[x], x);
			}
		}
	}

	public void agregarTabla(QTableWidget tableWidgetResultadoEmpleado2) {

		tableWidgetResultadoEmpleado2.clear();
		tableWidgetResultadoEmpleado2.setColumnCount(7);

		QTableWidgetItem __colItem = new QTableWidgetItem();
		__colItem.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado2", "IMSS"));
		tableWidgetResultadoEmpleado2.setHorizontalHeaderItem(0, __colItem);

		QTableWidgetItem __colItem1 = new QTableWidgetItem();
		__colItem1.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado2", "Nombre"));
		tableWidgetResultadoEmpleado2.setHorizontalHeaderItem(1, __colItem1);

		QTableWidgetItem __colItem2 = new QTableWidgetItem();
		__colItem2.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado2", "Apellido Paterno"));
		tableWidgetResultadoEmpleado2.setHorizontalHeaderItem(2, __colItem2);

		QTableWidgetItem __colItem3 = new QTableWidgetItem();
		__colItem3.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado2", "Apellido Materno"));
		tableWidgetResultadoEmpleado2.setHorizontalHeaderItem(3, __colItem3);

		QTableWidgetItem __colItem4 = new QTableWidgetItem();
		__colItem4.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado2", "Sexo"));
		tableWidgetResultadoEmpleado2.setHorizontalHeaderItem(4, __colItem4);

		QTableWidgetItem __colItem5 = new QTableWidgetItem();
		__colItem5.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado2", "Puesto"));
		tableWidgetResultadoEmpleado2.setHorizontalHeaderItem(5, __colItem5);

		QTableWidgetItem __colItem6 = new QTableWidgetItem();
		__colItem6.setText(com.trolltech.qt.core.QCoreApplication.translate(
				"Empleado2", "CURP"));
		tableWidgetResultadoEmpleado2.setHorizontalHeaderItem(6, __colItem6);

		tableWidgetResultadoEmpleado2.setRowCount(0);

		tableWidgetResultadoEmpleado2.resizeColumnsToContents();

	}

	public void seleccionCelda() {
		seleccionCelda(horario1.tableWidgetResultadoEmpleado2, arrEmpleadoTO,
				true);
	}

	public void seleccionCelda2() {
		seleccionCelda(horario1.tableWidgetConsideradosHorario, arrEmpContemTO,
				false);
	}

	public void seleccionCelda(QTableWidget tabla, EmpleadoTO[] arrEmpAuxTO,
			boolean banderaSeleccion) {
		if (arrEmpAuxTO != null) {

			if (banderaSeleccion == true) {
				empleadoTO = null;
				empleadoTO = arrEmpAuxTO[tabla.currentRow()];
				horario1.pushButtonAgregarHorario.setEnabled(true);
			} else {
				empleadoContTO = null;
				empleadoContTO = arrEmpAuxTO[tabla.currentRow()];
				if (banderaConsulta != true && banderaBaja != true) {
					horario1.pushButtonRemoverHorario.setEnabled(true);
				}
				horario1.pushButtonDescansoHorario.setEnabled(false);
				horario1.groupBoxCalendarioHorario.setEnabled(true);
				horario1.calendarWidgetCalendarioHorario.setEnabled(true);
				dibujaCalendario(arrBitacoraAsistenciaTO
						.get(tabla.currentRow()), (short) 1);

			}

		}
	}

	public void slotNoEditarTabla(int x, int y) {
		llenarTablaBasico(horario1.tableWidgetResultadoEmpleado2,
				arrEmpleadoTO[x], x);
	}

	public void slotNoEditarTabla2(int x, int y) {
		llenarTablaBasico(horario1.tableWidgetConsideradosHorario,
				arrEmpContemTO[x], x);
	}

	public short cambioTexto(String cadena, int limite) {
		short res = (short) -1;
		if (cadena.length() < limite) {
			if (cadena != null && cadena.replace(" ", "") != ""
					&& cadena.replace(" ", "").length() > 0) {
				res = 0;

			} else {
				res = 1;
			}
		} else {
			res = 2;
		}
		return res;
	}

	public void cambioCURP(String cadena) {
		short res = cambioTexto(cadena, 23);
		if (res == 0) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(false);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
		} else if (res == 1) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(false);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
		} else if (res == 2) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(true);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(true);
		}
	}

	public void cambioNSS(String cadena) {
		short res = cambioTexto(cadena, 11);
		if (res == 0) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(false);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
		} else if (res == 1) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(false);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
		} else if (res == 2) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(true);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(true);
		}
	}

	public void cambioPaterno(String cadena) {
		short res = cambioTexto(cadena, 80);
		if (res == 0) {
			horario1.labelValor1Empleado2.setEnabled(true);
			horario1.comboBoxValor1Empleado2.setEnabled(true);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(true);
			horario1.pushButtonBuscarEmpleado2.setEnabled(true);
		} else if (res == 1) {
			horario1.labelValor1Empleado2.setEnabled(false);
			horario1.comboBoxValor1Empleado2.setEnabled(false);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
			horario1.pushButtonBuscarEmpleado2.setEnabled(false);
		} else if (res == 2) {
			horario1.comboBoxValorEmpleado2.lineEdit().setText(
					cadena.substring(0, 79));
		}
	}

	public void cambioNombre(String cadena) {
		short res = cambioTexto(cadena, 80);
		if (res == 0) {

		} else if (res == 1) {

		} else if (res == 2) {
			horario1.comboBoxValor1Empleado2.lineEdit().setText(
					cadena.substring(0, 79));
		}
	}

	public void cambioPuesto(String cadena) {
		short res = cambioTexto(cadena, 80);
		if (res == 0) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(true);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(true);
		} else if (res == 1) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(false);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
		} else if (res == 2) {
			horario1.comboBoxValorEmpleado2.lineEdit().setText(
					cadena.substring(0, 79));
		}
	}

	public void cambioJefe(String cadena) {
		short res = cambioTexto(cadena, 162);
		if (res == 0) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(true);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(true);
		} else if (res == 1) {
			horario1.pushButtonBuscarEmpleado2.setEnabled(false);
			horario1.pushButtonLimpiarEmpleado2.setEnabled(false);
		} else if (res == 2) {
			horario1.comboBoxValorEmpleado2.lineEdit().setText(
					cadena.substring(0, 161));
		}
	}

	public void botonBuscarCURP() {

		if (horario1.lineEditvalor4Empleado2.text().length() == 23) {
			String cadena = new String(horario1.lineEditvalor4Empleado2.text()
					.replace("-", ""));
			EmpleadoTO[] arrRespuestaTO = null;
			arrRespuestaTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"encontrarEmpleadoActivoPorCURP", cadena,
					EmpleadoTO[].class);

			if (arrRespuestaTO != null) {
				if (arrRespuestaTO[0].getTipoError() > 0) {
					Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
				} else {

					arrEmpleadoTO = null;
					arrEmpleadoTO = arrRespuestaTO.clone();
					filtrarBusqueda();
					preparaVentana(null);
				}
			}

		}
	}

	public void botonBuscarNSS() {
		if (horario1.lineEditvalor4Empleado2.text().length() == 11) {
			String cadena = new String(horario1.lineEditvalor4Empleado2.text());
			EmpleadoTO[] arrRespuestaTO = null;
			arrRespuestaTO = (EmpleadoTO[]) ConexionConNegocios
					.invocaServicio("encontrarEmpleadoActivoPorNss", cadena,
							EmpleadoTO[].class);
			if (arrRespuestaTO != null) {
				if (arrRespuestaTO[0].getTipoError() > 0) {
					Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
				} else {

					arrEmpleadoTO = null;
					arrEmpleadoTO = arrRespuestaTO.clone();
					filtrarBusqueda();
					// eventosGenerales();
					preparaVentana(null);
				}
			}
		}

	}

	public void botonBuscarNombrePaterno() {

		String nombre = new String(horario1.comboBoxValor1Empleado2.lineEdit()
				.text());
		String paterno = new String(horario1.comboBoxValorEmpleado2.lineEdit()
				.text());
		EmpleadoTO[] arrRespuestaTO = null;
		if (cambioTexto(horario1.comboBoxValor1Empleado2.lineEdit().text(), 80) == 0) {
			PersonaTO personaTO = new PersonaTO();
			personaTO.setNombre(nombre);
			personaTO.setApellidoPaterno(paterno);
			arrRespuestaTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"encontrarEmpleadosActivosPorNombrePaterno", personaTO,
					EmpleadoTO[].class);
		} else {
			arrRespuestaTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"encontrarEmpleadosActivosPorPaterno", paterno,
					EmpleadoTO[].class);
		}
		if (arrRespuestaTO != null) {
			if (arrRespuestaTO[0].getTipoError() > 0) {
				Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
			} else {

				arrEmpleadoTO = null;
				arrEmpleadoTO = arrRespuestaTO.clone();
				filtrarBusqueda();
				// eventosGenerales();
				preparaVentana(null);

			}
		}
	}

	public void botonBuscarPuesto() {
		horario1.comboBoxValorEmpleado2.lineEdit().returnPressed.emit();
		if (horario1.comboBoxValorEmpleado2.currentIndex() > -1) {
			EmpleadoTO[] arrRespuestaTO = null;
			short idPuesto = arrPuestoTO[horario1.comboBoxValorEmpleado2
					.currentIndex()].getIdPuesto();
			arrRespuestaTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"encontrarEmpleadosActivosPorPuesto", idPuesto,
					EmpleadoTO[].class);
			if (arrRespuestaTO != null) {
				if (arrRespuestaTO[0].getTipoError() > 0) {
					Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
				} else {

					arrEmpleadoTO = null;
					arrEmpleadoTO = arrRespuestaTO.clone();
					filtrarBusqueda();
					// eventosGenerales();
					preparaVentana(null);

				}
			}
			horario1.comboBoxValorEmpleado2.setCurrentIndex(-1);
		}
	}

	public void botonBuscarJefe() {
		horario1.comboBoxValorEmpleado2.lineEdit().returnPressed.emit();
		if (horario1.comboBoxValorEmpleado2.currentIndex() > -1) {
			EmpleadoTO[] arrRespuestaTO = null;
			int idJefe = arrJefeTO[horario1.comboBoxValorEmpleado2
					.currentIndex()].getIdEmpleado();
			arrRespuestaTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"encontrarEmpleadosActivosPorJefe", idJefe,
					EmpleadoTO[].class);
			if (arrRespuestaTO != null) {
				if (arrRespuestaTO[0].getTipoError() > 0) {
					Utilerias.mostrarMensajeError(this, arrRespuestaTO[0]);
				} else {

					arrEmpleadoTO = null;
					arrEmpleadoTO = arrRespuestaTO.clone();
					filtrarBusqueda();
					eventosGenerales();
					preparaVentana(null);

				}
			}
			horario1.comboBoxValorEmpleado2.setCurrentIndex(-1);
		}
	}

	public void botonBuscarTodos() {
		arrEmpleadoTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
				"buscarEmpleadosActivos", EmpleadoTO[].class);
		filtrarBusqueda();
		// eventosGenerales();
		preparaVentana(null);
	}

	public void botonLimpiar() {
		horario1.comboBoxBuscarEmpleado2.setCurrentIndex(-1);
	}

	public void cambioComboTurno(int indice) {
		if (indice > -1) {
			horario1.pushButtonSiguiente1Horario.setEnabled(true);
		}
	}

	public void botonSiguiente1() {
		HorarioTO enviarTO = new HorarioTO();

		enviarTO.setFechaInicio(FechaHoraTO
				.getFechaUtil(horario1.dateEditDelHorario.text()));
		enviarTO.setFechaTermino(FechaHoraTO
				.getFechaUtil(horario1.dateEditAlHorario.text()));

		TransferObject regresoTO = (TransferObject) ConexionConNegocios
				.invocaServicio("validarRangoFecha", enviarTO,
						TransferObject.class);
		if (banderaConsulta != true && banderaBaja != true) {
			if (regresoTO != null) {
				if (regresoTO.getTipoError() == 0) {
					horario1.groupBoxHorarioHorario.setEnabled(false);
					horario1.groupBoxEmpleadosHorario.setEnabled(true);
					horario1.calendarWidgetCalendarioHorario
							.setMinimumDate(new QDate(
									horario1.dateEditDelHorario.date().year(),
									horario1.dateEditDelHorario.date().month(),
									horario1.dateEditDelHorario.date().day()));
					horario1.calendarWidgetCalendarioHorario
							.setMaximumDate(new QDate(
									horario1.dateEditAlHorario.date().year(),
									horario1.dateEditDelHorario.date().month(),
									horario1.dateEditDelHorario.date().day()));
					horario1.calendarWidgetCalendarioHorario.setDateRange(
							horario1.dateEditDelHorario.date(),
							horario1.dateEditAlHorario.date());
				} else {
					Utilerias.mostrarMensajeError(this, regresoTO);
				}
			}
		}
	}

	public void botonSiguiente2() {
		horario1.groupBoxEmpleadosHorario.setEnabled(false);
		horario1.groupBoxCalendarioHorario.setEnabled(true);
		horario1.groupBoxEstadoActualHorario.setEnabled(true);
		horario1.pushButtonValorHorario1.setEnabled(true);
		BitacoraHorarioTO bHorarioTO = new BitacoraHorarioTO();
		Date[] fechas = new Date[2];
		fechas[0] = FechaHoraTO
				.getFechaUtil(horario1.dateEditDelHorario.text());
		fechas[1] = FechaHoraTO.getFechaUtil(horario1.dateEditAlHorario.text());
		bHorarioTO.setListFecha(fechas);
		
		if (arrBitacoraAsistenciaTO == null)
			arrBitacoraAsistenciaTO = new ArrayList<BitacoraAsistenciaTO>();
		else{
			for (int x = 0; x < /* diferencia */arrBitacoraAsistenciaTO.size(); x++) {
				BitacoraAsistenciaTO reciveTO = (BitacoraAsistenciaTO) ConexionConNegocios
						.invocaServicio("generarRangoBitacoraAsistencia",
								bHorarioTO, BitacoraAsistenciaTO.class);

				if (reciveTO != null) {
					reciveTO.setIdEmpleado(arrBitacoraAsistenciaTO.get(x).getIdEmpleado());
					arrBitacoraAsistenciaTO.set(x,reciveTO);
				} else {
					Utilerias.mostrarMensajeError(this, new TransferObject(1, null,
							"No se pudo realizar la operación."));
				}
			}

		}


		/*
		 * int diferencia = 0;
		 * 
		 * diferencia = arrEmpContemTO.length - arrBitacoraAsistenciaTO.size();
		 */

		for (int x = arrBitacoraAsistenciaTO.size(); x < /* diferencia */arrEmpContemTO.length; x++) {
			bHorarioTO.setIdEmpleado(arrEmpContemTO[x].getIdEmpleado());

			BitacoraAsistenciaTO reciveTO = (BitacoraAsistenciaTO) ConexionConNegocios
					.invocaServicio("generarRangoBitacoraAsistencia",
							bHorarioTO, BitacoraAsistenciaTO.class);

			if (reciveTO != null) {
				arrBitacoraAsistenciaTO.add(reciveTO);
			} else {
				Utilerias.mostrarMensajeError(this, new TransferObject(1, null,
						"No se pudo realizar la operación."));
			}
		}

	}

	public void botonRegresar() {
		horario1.groupBoxEmpleadosHorario.setEnabled(false);
		horario1.groupBoxHorarioHorario.setEnabled(true);
	}

	public void botonRegresar2() {
		horario1.groupBoxEmpleadosHorario.setEnabled(true);
		horario1.groupBoxCalendarioHorario.setEnabled(false);
		horario1.groupBoxEstadoActualHorario.setEnabled(false);
	}

	public void botonAgregar() {
		horario1.pushButtonAgregarHorario.setEnabled(false);
		EmpleadoTO[] reciveTO = null;
		FiltroEmpleadoTO filtroTO = new FiltroEmpleadoTO();
		filtroTO.setArrEmpleado1TO(arrEmpleadoTO);
		filtroTO.setEmpleadoTO(empleadoTO);
		reciveTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
				"quitarEmpleados", filtroTO, EmpleadoTO[].class);
		if (reciveTO != null) {
			arrEmpleadoTO = reciveTO;
			reciveTO = null;
			filtroTO.setArrEmpleado1TO(arrEmpContemTO);
			reciveTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"agregarEmpleados", filtroTO, EmpleadoTO[].class);

			arrEmpContemTO = reciveTO;
			reciveTO = null;
			preparaVentana(null);
			horario1.pushButtonSiguiente2Horario.setEnabled(true);
		} else {
			Utilerias.mostrarMensajeError(this, new TransferObject(1, null,
					"No se pudo realizar la operación."));
		}

	}

	public void botonRemover() {
		horario1.pushButtonRemoverHorario.setEnabled(false);
		horario1.pushButtonDescansoHorario.setEnabled(false);
		EmpleadoTO[] reciveTO = null;
		FiltroEmpleadoTO filtroTO = new FiltroEmpleadoTO();
		filtroTO.setArrEmpleado1TO(arrEmpContemTO);
		filtroTO.setEmpleadoTO(empleadoContTO);

		dibujaCalendario(arrBitacoraAsistenciaTO
				.get(horario1.tableWidgetConsideradosHorario.currentRow()),
				(short) 0);

		arrBitacoraAsistenciaTO.remove(horario1.tableWidgetConsideradosHorario
				.currentRow());
		horario1.tableWidgetConsideradosHorario.clear();
		reciveTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
				"quitarEmpleados", filtroTO, EmpleadoTO[].class);
		horario1.calendarWidgetCalendarioHorario.repaint();
		if (reciveTO != null) {
			arrEmpContemTO = reciveTO;

			if (arrEmpContemTO.length == 0) {
				arrEmpContemTO = null;
				horario1.pushButtonRegresar2.clicked.emit(true);
				horario1.pushButtonSiguiente2Horario.setEnabled(false);
			}

			reciveTO = null;
			filtroTO.setArrEmpleado1TO(arrEmpleadoTO);
			reciveTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"agregarEmpleados", filtroTO, EmpleadoTO[].class);
			arrEmpleadoTO = reciveTO;
			reciveTO = null;
			preparaVentana(null);
		} else {
			Utilerias.mostrarMensajeError(this, new TransferObject(1, null,
					"No se pudo realizar la operación."));
		}
	}

	public void filtrarBusqueda() {
		EmpleadoTO[] reciveTO = null;
		FiltroEmpleadoTO filtroTO = new FiltroEmpleadoTO();
		filtroTO.setArrEmpleado1TO(arrEmpleadoTO);
		filtroTO.setArrEmpAOperarTO(arrEmpContemTO);
		reciveTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
				"filtrarEmpleadosConsiderados", filtroTO, EmpleadoTO[].class);
		if (reciveTO != null) {
			arrEmpleadoTO = reciveTO;
			reciveTO = null;
		}
	}

	public void botonDescanso() {
		horario1.calendarWidgetCalendarioHorario.setEnabled(true);
		BitacoraAsistenciaTO reciveTO = null;
		QDate fech = horario1.calendarWidgetCalendarioHorario.selectedDate();

		Date fecha = FechaHoraTO.getFechaUtil(String.valueOf(fech.year()) + "/"
				+ String.valueOf(fech.month()) + "/"
				+ String.valueOf(fech.day()));

		arrBitacoraAsistenciaTO.get(
				horario1.tableWidgetConsideradosHorario.currentRow()).setFecha(
				fecha);

		reciveTO = (BitacoraAsistenciaTO) ConexionConNegocios.invocaServicio(
				"ponerQuitarDescanso", arrBitacoraAsistenciaTO
						.get(horario1.tableWidgetConsideradosHorario
								.currentRow()), BitacoraAsistenciaTO.class);

		if (reciveTO != null) {
			arrBitacoraAsistenciaTO.set(horario1.tableWidgetConsideradosHorario
					.currentRow(), reciveTO);
			dibujaCalendario(arrBitacoraAsistenciaTO
					.get(horario1.tableWidgetConsideradosHorario.currentRow()),
					(short) 1);
			horario1.calendarWidgetCalendarioHorario.customContextMenuRequested
					.emit(null);
			horario1.calendarWidgetCalendarioHorario.customContextMenuRequested
					.emit(null);
		} else {
			Utilerias.mostrarMensajeError(this, new TransferObject(1, null,
					"No se pudo realizar la operación."));
		}

	}

	public void botonBaja() {
		TransferObject regresoTO = (TransferObject) ConexionConNegocios
				.invocaServicio("validarRangoFecha", horarioTO,
						TransferObject.class);

		if (regresoTO != null) {
			if (regresoTO.getTipoError() == 0) {
				BitacoraHorarioTO bitacoraHorTO = new BitacoraHorarioTO();

				FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
				java.sql.Date inicio = FechaHoraTO.getFecha("1971/01/01");
				java.sql.Date fin = FechaHoraTO.getFecha("3000/01/01");
				bitacoraHorTO = fabrica.getBitacoraHorarioDAO()
						.selectByRangoFechaHorario(inicio, fin,
								horarioTO.getIdHorario());

				for (int x = 0; x < bitacoraHorTO.getListIdOperacion().length; x++) {
					fabrica.getBitacoraHorarioDAO().deleteBitacoraHorario(
							bitacoraHorTO.getListIdOperacion()[x]);
					BitacoraAsistenciaTO bitacoraAsisTO = fabrica
							.getBitacoraAsistenciaDAO()
							.selectByRangoFechaEmpleado(
									inicio,
									fin,
									bitacoraHorTO.getListEmpleadoTO()[x]
											.getIdEmpleado());

					for (int y = 0; y < bitacoraAsisTO.getListIdoperacion().length; y++) {
						fabrica.getBitacoraAsistenciaDAO()
								.deleteBitacoraAsistencia(
										bitacoraAsisTO.getListIdoperacion()[y]);
					}
				}

				fabrica.getHorarioDAO().deleteHorario(horarioTO.getIdHorario());
				ArrayList<HorarioTO> listHorarioTO = fabrica.getHorarioDAO()
						.selectHorario();

				if (listHorarioTO != null) {
					arrHorarioTO = (HorarioTO[]) listHorarioTO
							.toArray(new HorarioTO[listHorarioTO.size()]);
				} else {
					arrHorarioTO = null;
				}

				preparaVentanaBCM(ui);
				horario2.pushButtonValorHorario2.setEnabled(false);

			} else {
				banderaConsulta = true;
				Utilerias
						.mostrarMensajeError(
								this,
								new TransferObject(
										3,
										"",
										"No es posible realizar la operación seleccionada, debido a que el horario ha concluido o esta en proceso."));
			}
		}
	}

	public void botonTerminar() {
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		int idHorario;
		// int idBitacoraHorario;
		// int idBitacoraAsistencia;
		BitacoraAsistenciaTO[] bAsistenciaTO = null;

		HorarioTO enviarTO = new HorarioTO();
		enviarTO.setFechaInicio(FechaHoraTO
				.getFechaUtil(horario1.dateEditDelHorario.text()));
		enviarTO.setFechaTermino(FechaHoraTO
				.getFechaUtil(horario1.dateEditAlHorario.text()));
		TurnoTO turnoTO = new TurnoTO();
		turnoTO.setIdTurno(arrTurnoTO[horario1.comboBoxTurnoHorario
				.currentIndex()].getIdTurno());
		enviarTO.setTurnoTO(turnoTO);
		idHorario = fabrica.getHorarioDAO().insertHorario(enviarTO);

		bAsistenciaTO = (BitacoraAsistenciaTO[]) arrBitacoraAsistenciaTO
				.toArray(new BitacoraAsistenciaTO[arrBitacoraAsistenciaTO
						.size()]);
		for (int x = 0; x < bAsistenciaTO.length; x++) {

			BitacoraHorarioTO bHorarioTO = new BitacoraHorarioTO();
			bHorarioTO.setFecha(new Date());
			bHorarioTO.setIdHorario(idHorario);
			bHorarioTO.setIdEmpleado(bAsistenciaTO[x].getIdEmpleado());
			bHorarioTO.setIdUsuario(usuarioTO.getIdUsuario());
			fabrica.getBitacoraHorarioDAO().insertBitacoraHorario(bHorarioTO);

			for (int y = 0; y < bAsistenciaTO[x].getListFecha().length; y++) {

				BitacoraAsistenciaTO auxTO = new BitacoraAsistenciaTO();
				auxTO.setIdEmpleado(bAsistenciaTO[x].getIdEmpleado());
				auxTO.setFecha(bAsistenciaTO[x].getListFecha()[y]);
				auxTO.setIdMotivo(bAsistenciaTO[x].getListMotivoTO()[y]
						.getIdMotivo());
				auxTO.setIdUsuario(usuarioTO.getIdUsuario());
				auxTO.setDescripcion("");

				fabrica.getBitacoraAsistenciaDAO().insertBitacoraAsistencia(
						auxTO);
			}

			arrEmpContemTO = null;
			arrEmpleadoTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"buscarEmpleadosActivos", EmpleadoTO[].class);
			arrBitacoraAsistenciaTO = null;
			horario1.pushButtonValorHorario1.setEnabled(false);
			bloqueaComponentes();
			horario1.groupBoxAtributosHorario.setEnabled(true);
			horario1.groupBoxHorarioHorario.setEnabled(true);
			horario1.comboBoxTurnoHorario.setCurrentIndex(-1);
			preparaVentana(null);
		}

	}

	public void botonTerminarModificar() {
		
		FabricaDeDAOs fabrica = FabricaDeDAOs.getFabricaDeDAOs(1);
		
		java.sql.Date inicio = FechaHoraTO.getFecha("1971/01/01");
		java.sql.Date fin = FechaHoraTO.getFecha("3000/01/01");
		
		for (int x = 0; x < bitHorModTO.getListIdOperacion().length; x++) {
			fabrica.getBitacoraHorarioDAO().deleteBitacoraHorario(
					bitHorModTO.getListIdOperacion()[x]);
			BitacoraAsistenciaTO bitacoraAsisTO = fabrica
					.getBitacoraAsistenciaDAO()
					.selectByRangoFechaEmpleado(
							inicio,
							fin,
							bitHorModTO.getListEmpleadoTO()[x]
									.getIdEmpleado());

			for (int y = 0; y < bitacoraAsisTO.getListIdoperacion().length; y++) {
				fabrica.getBitacoraAsistenciaDAO()
						.deleteBitacoraAsistencia(
								bitacoraAsisTO.getListIdoperacion()[y]);
			}
		}

		fabrica.getHorarioDAO().deleteHorario(horarioTO.getIdHorario());
				
		int idHorario;
		
		BitacoraAsistenciaTO[] bAsistenciaTO = null;

		HorarioTO enviarTO = new HorarioTO();
		enviarTO.setFechaInicio(FechaHoraTO
				.getFechaUtil(horario1.dateEditDelHorario.text()));
		enviarTO.setFechaTermino(FechaHoraTO
				.getFechaUtil(horario1.dateEditAlHorario.text()));
		TurnoTO turnoTO = new TurnoTO();
		turnoTO.setIdTurno(arrTurnoTO[horario1.comboBoxTurnoHorario
				.currentIndex()].getIdTurno());
		enviarTO.setTurnoTO(turnoTO);
		idHorario = fabrica.getHorarioDAO().insertHorario(enviarTO);

		bAsistenciaTO = (BitacoraAsistenciaTO[]) arrBitacoraAsistenciaTO
				.toArray(new BitacoraAsistenciaTO[arrBitacoraAsistenciaTO
						.size()]);
		for (int x = 0; x < bAsistenciaTO.length; x++) {

			BitacoraHorarioTO bHorarioTO = new BitacoraHorarioTO();
			bHorarioTO.setFecha(new Date());
			bHorarioTO.setIdHorario(idHorario);
			bHorarioTO.setIdEmpleado(bAsistenciaTO[x].getIdEmpleado());
			bHorarioTO.setIdUsuario(usuarioTO.getIdUsuario());
			fabrica.getBitacoraHorarioDAO().insertBitacoraHorario(bHorarioTO);

			for (int y = 0; y < bAsistenciaTO[x].getListFecha().length; y++) {

				BitacoraAsistenciaTO auxTO = new BitacoraAsistenciaTO();
				auxTO.setIdEmpleado(bAsistenciaTO[x].getIdEmpleado());
				auxTO.setFecha(bAsistenciaTO[x].getListFecha()[y]);
				auxTO.setIdMotivo(bAsistenciaTO[x].getListMotivoTO()[y]
						.getIdMotivo());
				auxTO.setIdUsuario(usuarioTO.getIdUsuario());
				auxTO.setDescripcion("");

				fabrica.getBitacoraAsistenciaDAO().insertBitacoraAsistencia(
						auxTO);
			}

			arrEmpContemTO = null;
			arrEmpleadoTO = (EmpleadoTO[]) ConexionConNegocios.invocaServicio(
					"buscarEmpleadosActivos", EmpleadoTO[].class);
			arrBitacoraAsistenciaTO = null;
			horario1.pushButtonValorHorario1.setEnabled(false);
			bloqueaComponentes();
			horario1.groupBoxAtributosHorario.setEnabled(true);
			horario1.groupBoxHorarioHorario.setEnabled(true);
			horario1.comboBoxTurnoHorario.setCurrentIndex(-1);
			preparaVentana(null);
		}
		this.close();
	}

	public void dibujaCalendario(BitacoraAsistenciaTO bitacoraAsistenciaTO,
			short operacion) {
		QDate fecha = new QDate();
		QColor color = new QColor();

		for (int x = 0; x < bitacoraAsistenciaTO.getListFecha().length; x++) {

			if (bitacoraAsistenciaTO.getListMotivoTO()[x].getIdMotivo() == 3
					&& operacion == 1)
				color.setRgb(247, 220, 72);
			else if (bitacoraAsistenciaTO.getListMotivoTO()[x].getIdMotivo() == 1
					&& operacion == 1)
				color.setRgb(255, 0, 166);
			else
				color.setRgb(255, 255, 255);

			fecha.setDate(obtenerAnio(bitacoraAsistenciaTO.getListFecha()[x]),
					obtenerMes(bitacoraAsistenciaTO.getListFecha()[x]),
					obtenerDia(bitacoraAsistenciaTO.getListFecha()[x]));

			horario1.calendarWidgetCalendarioHorario.activated
					.emit(horario1.calendarWidgetCalendarioHorario
							.minimumDate());

			dibujaBasico(horario1.calendarWidgetCalendarioHorario, fecha, color);
		}
	}

	public void dibujaBasico(QCalendarWidget calendario, QDate fecha,
			QColor color) {
		QTextCharFormat formato = new QTextCharFormat();
		formato.setBackground(new QBrush(new QColor(color)));
		calendario.setDateTextFormat(fecha, formato);
	}

	public void clickCalendario(QDate fecha) {
		if (banderaConsulta != true && banderaBaja != true)
			horario1.pushButtonDescansoHorario.setEnabled(true);
	}

	public int obtenerAnio(java.util.Date fecha) {

		String anio = FechaHoraTO.getFecha(fecha).toString();

		return Integer.parseInt(anio.substring(0, 4));
	}

	public int obtenerMes(java.util.Date fecha) {

		String mes = FechaHoraTO.getFecha(fecha).toString();

		return Integer.parseInt(mes.substring(5, 7));
	}

	public int obtenerDia(java.util.Date fecha) {

		String dia = FechaHoraTO.getFecha(fecha).toString();

		return Integer.parseInt(dia.substring(8, dia.length()));
	}
}
